-- ------------------------------------------
-- CrearPartido
-- Se crea un partido.
-- ------------------------------------------

CREATE OR REPLACE FUNCTION CrearPartido(param_idEquipoLocal    partidos.idEquipoLocal%TYPE,
                                         param_idEquipoVisita   partidos.idEquipoVisita%TYPE,
                                         param_factorVisita     partidos.factorVisita%TYPE,
                                         param_factorLocal      partidos.factorLocal%TYPE,
                                         param_factorEmpate     partidos.factorEmpate%TYPE,
                                         param_fecha            partidos.fecha%TYPE,
                                         param_esClasificatorio boolean)
RETURNS void AS $$

        DECLARE
                equipoLocal equipos%ROWTYPE;
                equipoVisita equipos%ROWTYPE;

	BEGIN

                -- Seleccionar equipos
                SELECT INTO equipoLocal * FROM equipos WHERE idEquipo = param_idEquipoLocal;
                SELECT INTO equipoVisita * FROM equipos WHERE idEquipo = param_idEquipoLocal;

                -- Excepciones
                IF (param_idEquipoLocal = param_idEquipoVisita) THEN
                    RAISE EXCEPTION 'No puede ser el mismo equipo en ambas partes';
                END IF;

                IF (equipoLocal IS NULL OR equipoVisita IS NULL) THEN
                    RAISE EXCEPTION 'Uno o ambos equipos no existen';
                END IF;

                IF (param_factorVisita < 1  OR
                    param_factorLocal  < 1  OR
                    param_factorEmpate < 1    ) THEN
                    RAISE EXCEPTION 'Los factores deben ser mayores a 1';
                END IF;

                -- INSERT
                -- Se asume No iniciado (1), 0 espectadores, fecha actual

                INSERT INTO partidos (estado, nroEspectadores, fecha       , resultado, idEquipoLocal      , idEquipoVisita      , factorLocal      , factorVisita      , factorEmpate      , esClasificatorio)
                            VALUES   (  1   ,    0           , param_fecha ,  NULL    , param_idEquipoLocal, param_idEquipoVisita, param_factorLocal, param_factorVisita, param_factorEmpate, param_esClasificatorio);

        END;

$$ LANGUAGE plpgsql